package com.pandora.credit.service;

import com.pandora.credit.dto.request.CreditCardRequest;
import com.pandora.credit.dto.request.CreditRequest;
import com.pandora.credit.dto.request.CustomerLoansRequest;
import com.pandora.credit.dto.request.LoanRequest;
import com.pandora.credit.dto.response.*;
import com.pandora.credit.entity.Credit;

import java.util.List;

/**
 * @author developer
 */
public interface CreditService {

    /**
     * getByCondition
     * @param credit credit
     * @return CreditList
     */
    List<Credit> getByCondition(Credit credit);

    /**
     * update
     * @param credit credit
     */
    void update(Credit credit);

    /**
     * doGetLoansType
     * @param userAgent userAgent
     * @return LoanResponseNextLong
     */
    LoanResponseNextLong doGetLoansType(String userAgent);

    /**
     * doGetLoans
     * @param req req
     * @param userAgent userAgent
     * @return LoanResponseNextInt
     */
    LoanResponseNextInt doGetLoans(LoanRequest req, String userAgent);

    /**
     * doGetCredits
     * @param req req
     * @param authorizationToken authorizationToken
     * @param accessToken accessToken
     * @return LoanResponseNextLong
     */
    LoanResponseNextLong doGetCredits(LoanRequest req, String authorizationToken, String accessToken);

    /**
     * doGetCustomerCredit
     * @param cusId cusId
     * @param authorizationToken authorizationToken
     * @return LoanResponseNextNo
     */
    LoanResponseNextNo doGetCustomerCredit(String cusId, String authorizationToken);

    /**
     * doGetBanks
     * @param req req
     * @return LoanResponseNextLong
     */
    LoanResponseNextLong doGetBanks(CreditCardRequest req);

    /**
     * doGetCreditCards
     * @param req req
     * @return LoanResponseNextInt
     */
    LoanResponseNextInt doGetCreditCards(CreditCardRequest req);

    /**
     * doCustomerCreditCards
     * @param authorizationToken authorizationToken
     * @param req req
     * @return LoanResponseNextStr
     */
    LoanResponseNextStr doCustomerCreditCards(String authorizationToken, CustomerLoansRequest req);

    /**
     * doGetPandoralist
     * @param type type
     * @param req req
     * @return LoanResponseNextLong
     */
    LoanResponseNextLong doGetPandoralist(String type, CreditRequest req);

    /**
     * doGetPandoraActions
     * @return PandoraActionsResponse
     */
    PandoraActionsResponse doGetPandoraActions();

}
